/*
 * Copyright (C), 2002-2018, Caljm有限公司
 * FileName: NettyBooter
 * Author:   Byron Wang
 * Date:     2018/8/23 下午10:55
 * Description: //模块目的、功能描述
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */

package com.cpcs;

import com.cpcs.netty.WsServer;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

/**
 * 功能描述：Netty websocket 服务器启动类
 *
 * @author Byron Wang
 * @since 2018/8/23
 */
@Component
public class NettyBooter implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 在 web 项目中（spring mvc），系统会存在两个容器，一个是 root application context,
        // 另一个就是我们自己的 projectName-servlet context（作为root application context的子容器）
        // 就会造成 onApplicationEvent 方法被执行两次。为了避免上面提到的问题，可以只在
        // root application context 初始化完成后调用逻辑代码，其他的容器的初始化完成，则不做任何处理
        if (event.getApplicationContext().getParent() == null) {
            // context 没有 parent，他就是 root application context
            WsServer.getInstance().start();
        }
    }
}
